<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>ru.unlocker.reports</groupId>
  <artifactId>monitoring-project</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Reports Monitoring</name>
  <modules>
    <module>monitoring-job</module>
    <module>monitoring-data-sampler</module>
    <module>monitoring-common</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <flink.version>1.19.0</flink.version>
    <target.java.version>17</target.java.version>
    <scala.binary.version>2.12</scala.binary.version>
    <maven.compiler.source>${target.java.version}</maven.compiler.source>
    <maven.compiler.target>${target.java.version}</maven.compiler.target>
    <log4j.version>2.17.1</log4j.version>
    <surefire-plugin.version>3.2.2</surefire-plugin.version>
    <quarkus.version>3.9.2</quarkus.version>
  </properties>

  <repositories>
    <repository>
      <id>apache.snapshots</id>
      <name>Apache Development Snapshot Repository</name>
      <url>https://repository.apache.org/content/repositories/snapshots/</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.quarkus.platform</groupId>
        <artifactId>quarkus-bom</artifactId>
        <version>${quarkus.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- Apache Flink dependencies -->
      <!-- These dependencies are provided, because they should not be packaged into the JAR file. -->
      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
      </dependency>

      <!-- Add connector dependencies here. They must be in the default scope (compile). -->

      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>${flink.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-json</artifactId>
        <version>${flink.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-base</artifactId>
        <version>${flink.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka</artifactId>
        <version>3.1.0-1.18</version>
      </dependency>

      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-jdbc</artifactId>
        <version>3.1.2-1.18</version>
      </dependency>

      <dependency>
        <groupId>com.github.stateless4j</groupId>
        <artifactId>stateless4j</artifactId>
        <version>2.6.0</version>
      </dependency>

      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
      </dependency>

      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.7.3</version>
      </dependency>

      <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-test-utils</artifactId>
        <version>${flink.version}</version>
        <scope>test</scope>
      </dependency>


      <!-- Add logging framework, to produce console output when running in the IDE. -->
      <!-- These dependencies are excluded from the application JAR by default. -->
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>


    </plugins>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-maven-plugin</artifactId>
          <version>${quarkus.version}</version>
          <extensions>true</extensions>
          <executions>
            <execution>
              <goals>
                <goal>build</goal>
                <goal>generate-code</goal>
                <goal>generate-code-tests</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <!-- Java Compiler -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.11.0</version>
          <configuration>
            <source>${target.java.version}</source>
            <target>${target.java.version}</target>
            <showDeprecation>true</showDeprecation>
            <showWarnings>true</showWarnings>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.4.2</version>
          <executions>
            <execution>
              <id>default</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${surefire-plugin.version}</version>
          <configuration>
            <systemPropertyVariables>
              <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
              <maven.home>${maven.home}</maven.home>
            </systemPropertyVariables>
          </configuration>
        </plugin>
        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>0.44.0</version>
          <extensions>true</extensions>
          <executions>
            <execution>
              <id>build</id>
              <phase>package</phase>
              <goals>
                <goal>build</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <logAll>true</logAll>
            <logStdout>true</logStdout>
            <verbose>true</verbose>
            <images>
              <image>
                <name>unlocker/${project.artifactId}:${project.version}</name>
                <build>
                  <args>
                    <appname>${project.name}</appname>
                    <jarname>${project.artifactId}.jar</jarname>
                  </args>
                  <dockerFile>Dockerfile</dockerFile>
                </build>
              </image>
            </images>
          </configuration>
        </plugin>

        <!-- We use the maven-shade plugin to create a fat jar that contains all necessary dependencies. -->
        <!-- Change the value of <mainClass>...</mainClass> if your program entry point changes. -->
        <!--        <plugin>-->
        <!--          <groupId>org.apache.maven.plugins</groupId>-->
        <!--          <artifactId>maven-shade-plugin</artifactId>-->
        <!--          <version>3.1.1</version>-->
        <!--          <executions>-->
        <!--            &lt;!&ndash; Run shade goal on package phase &ndash;&gt;-->
        <!--            <execution>-->
        <!--              <phase>package</phase>-->
        <!--              <goals>-->
        <!--                <goal>shade</goal>-->
        <!--              </goals>-->
        <!--              <configuration>-->
        <!--                <createDependencyReducedPom>false</createDependencyReducedPom>-->
        <!--                <artifactSet>-->
        <!--                  <excludes>-->
        <!--                    <exclude>org.apache.flink:flink-shaded-force-shading</exclude>-->
        <!--                    <exclude>com.google.code.findbugs:jsr305</exclude>-->
        <!--                    <exclude>org.slf4j:*</exclude>-->
        <!--                    <exclude>org.apache.logging.log4j:*</exclude>-->
        <!--                  </excludes>-->
        <!--                </artifactSet>-->
        <!--                <filters>-->
        <!--                  <filter>-->
        <!--                    &lt;!&ndash; Do not copy the signatures in the META-INF folder.-->
        <!--                    Otherwise, this might cause SecurityExceptions when using the JAR. &ndash;&gt;-->
        <!--                    <artifact>*:*</artifact>-->
        <!--                    <excludes>-->
        <!--                      <exclude>META-INF/*.SF</exclude>-->
        <!--                      <exclude>META-INF/*.DSA</exclude>-->
        <!--                      <exclude>META-INF/*.RSA</exclude>-->
        <!--                    </excludes>-->
        <!--                  </filter>-->
        <!--                </filters>-->
        <!--                <transformers>-->
        <!--                  <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>-->
        <!--                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
        <!--                    <mainClass>ru.unlocker.reports.DataStreamJob</mainClass>-->
        <!--                  </transformer>-->
        <!--                </transformers>-->
        <!--              </configuration>-->
        <!--            </execution>-->
        <!--          </executions>-->
        <!--        </plugin>-->

      </plugins>
    </pluginManagement>
  </build>
  <profiles>
    <profile>
      <id>native</id>
      <activation>
        <property>
          <name>native</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-failsafe-plugin</artifactId>
              <version>${surefire-plugin.version}</version>
              <executions>
                <execution>
                  <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                  </goals>
                  <configuration>
                    <systemPropertyVariables>
                      <native.image.path>${project.build.directory}/${project.build.finalName}-runner
                      </native.image.path>
                      <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                      <maven.home>${maven.home}</maven.home>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
      <properties>
        <quarkus.package.type>native</quarkus.package.type>
      </properties>
    </profile>

    <profile>
      <id>docker-image-with-assembly</id>
      <activation>
        <file>
          <exists>src/main/docker/assembly.xml</exists>
        </file>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>io.fabric8</groupId>
              <artifactId>docker-maven-plugin</artifactId>
              <version>0.44.0</version>
              <configuration>
                <images>
                  <image>
                    <name>unlocker/${project.artifactId}:${project.version}</name>
                    <build>
                      <assembly>
                        <descriptor>assembly.xml</descriptor>
                      </assembly>
                    </build>
                  </image>
                </images>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>
</project>
